#ifndef __LOGGER_H__
#define __LOGGER_H__

#include "ArchivoTexto.h"
#include "ParserException.h"
#include <string>
#include <iostream>

using namespace std;

/**
 * Implementacion del Singleton Logger (Guarda mensajes de estado a un archivo de texto)
 */
class Logger{
	ArchivoTexto* logFile ;
	

private:
    static bool instanceFlag;
    static string logFilename ;
	static Logger *instance;
    Logger();

public:
	/**
	 * Retorna la unica instancia del Logger
	 */
	static Logger* getInstance();

	/**
	 * Setea el nombre del archivo sobre el cual se genera el log. POR DEFECTO = log.txt
	 */
	void setLogFilename(const string& fileName);

	/**
	 * Para generar mensaje de log de error
	 */
	void err(const string& msg);

	/**
	 * Para generar mensaje de log de warning
	 */
	void warn(const string& msg);

	/**
	 * Para generar mensaje de log en base a una exception del parser
	 */
	void log(ParserException& exc);

	/**
	 * Para flushear el archivo de log
	 */
	void flush();

	/**
	 * Libera los recursos usados
	 */
	~Logger();

};

#endif